package binary_tree;

public class UseInorderAndPostorderBuildTree {
    public int postIndex;
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        postIndex = postorder.length - 1;
        return buildTreeChild(inorder,postorder,0,inorder.length - 1);
    }
    public TreeNode buildTreeChild(int[] inorder,int[] postorder,int inbegin,int inend){
        if(inbegin > inend){
            return null;
        }
        TreeNode root = new TreeNode(postorder[postIndex]);

        int rootIndex = findVal(inorder,inbegin,inend,postorder[postIndex]);
        postIndex--;
        root.right = buildTreeChild(inorder,postorder,rootIndex + 1,inend);
        root.left = buildTreeChild(inorder,postorder,inbegin,rootIndex - 1);
        return root;
    }
    private int findVal(int[] inorder,int inbegin,int inend,int val){
        for(int i = inbegin; i <= inend;i++){
            if(inorder[i] == val){
                return i;
            }
        }
        return -1;
    }

}
